בנה מערכת ניהול תוכן בסיסית על גבי מסד נתונים עם כמה דפים,
עריכה ותצוגתם בעיצוב משותף
כמעט כל אתר מורכב ממערכת לניהול תוכן שדרכה מכניסים למסד תוכן ומציגים אותו בעמודים שונים. כמו כל מערכת אחרת, גם פה את הבניה נתחיל מתכנונן.
מבנה המערכת
[*] המערכת צריכה לאפשר יצירה של עמודים עם תכנים שונים
[*] המערכת צריכה לאפשר עריכה של עמודים קיימים
[*] המערכת צריכה להציג את התוכן של כל עמוד בנפרד
manage.php
שני הפעולות הראשונות די דומות. שניהם מציגות שדה טקסט, קולטות את הנתונים ממנו ומכניסות למסד. ההבדל הוא רק בשאילתה שיש לבצע. בגלל הדמיון ביניהם, וכנראה הרבה קוד משותף - נשאיר אותם בסקריפט אחד (עם תנאי - איזו שאילתה לעשות)
show.php
הפעולה השלישית שונה ותצריך סקריפט משלה שיבצע שליפה מהמסד.
המסד עצמו
הנתון היחידי שלפי הדרישה אנחנו צריכים לשמור זה: "תוכן העמוד".
כדי שיהיה לנו יותר קל להבדיל בין עמוד לעמוד ולעבוד עם המסד
ניתן לכל עמוד גם מספר סידורי ID
1. מספר id שגדל כל הזמן לבד (autoincrement)
2. שדה content מסוג text שיכיל את התוכן.
שאילתת יצירת הטבלה
שליפת נתונים
נתחיל מהחלק הקל. נכניס למסד באופן ידני (דרך phpMyAdmin) שני שורות לטבלה, כדי שעמוד 1 ועמוד 2 יהיו קיימים. כל עמוד במערכת שלנו יוצג באמצעות הקישור:
show.php?id=X כשבמקום X יהיה מספר העמוד.
show.php
<?php
if( isset($_GET['id']) )
{
}
else
{
echo 'העמוד המבוקש לא קיים';
}
if( isset($_GET['id']) )
{
}
else
{
echo 'העמוד המבוקש לא קיים';
}
בעת טעינת העמוד PHP לבד עוברת על הקישור ומכניסה לתוך מערך $_GET את כל הנתונים שהועברו בקישור. הפונקציה isset בודקת האם המשתנה קיים (כלומר האם בתוך המערך $_GET יש ערך id) .
אם המשתמש יגלוש לסקריפט בלי ?id=X אז isset תחזיר false והסקריפט יאמר שהעמוד לא נמצא.
בדיקה מספרית
בפועל המשתמש יכול לגלוש אל show.php?id=haha. במקרה הזה הערך יהיה קיים במערך, אבל הוא בכלל לא מספרי. כדי שזה לא יגרום לבעיות, נבדוק שהערך הוא מספרי:
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
}
else
{
echo 'העמוד המבוקש לא קיים';
}
{
}
else
{
echo 'העמוד המבוקש לא קיים';
}
הפונקציה ctype_digit בודקת האם המחרוזת שהוכנסה מכילה אך ורק ספרות ושום דבר אחר. אם כן - תחזיר true, אם לא - false
שליפה
אחרי שבדקנו שהערך תקין ומספרי — נשלוף נתונים על העמוד הזה מהמסד.
קודם כל יש לבצע חיבור למסד ולאחר מכן את השליפה:
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
// השליפה עצמה
$pageResource = mysql_query("SELECT * FROM `pages` WHERE `id`=".$_GET['id']);
// בדיקה שהעמוד נמצא במסד. (יכול להיות שאין עמוד כזה בכלל)
if( mysql_num_rows($pageResource) != 1)
{
echo 'העמוד לא נמצא';
}
else
{
// הכנסת הנתונים מהמסד למערך
$page = mysql_fetch_assoc($pageResource);
// הדפסת הנתונים למשתמש
echo $page['content'];
}
}
else
{
echo 'העמוד המבוקש לא קיים';
}
{
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
// השליפה עצמה
$pageResource = mysql_query("SELECT * FROM `pages` WHERE `id`=".$_GET['id']);
// בדיקה שהעמוד נמצא במסד. (יכול להיות שאין עמוד כזה בכלל)
if( mysql_num_rows($pageResource) != 1)
{
echo 'העמוד לא נמצא';
}
else
{
// הכנסת הנתונים מהמסד למערך
$page = mysql_fetch_assoc($pageResource);
// הדפסת הנתונים למשתמש
echo $page['content'];
}
}
else
{
echo 'העמוד המבוקש לא קיים';
}
למה צריך את set names פירטתי [url=/UTF_8_%D7%A7%D7%99%D7%93%D7%95%D7%93_%D7%95%D7%A1%D7%99%D7%9E%D7%A0%D7%99_%D7%A9%D7%90%D7%9C%D7%94.htm]במדריך על utf-8, קידודים וסימני שאלה[/url].
השליפה עצמה בתרגום מאנגלית נראית כמו
שלוף מהטבלה pages את הנתונים של השורה שבה מספר העמוד id שווה ל
וכמספר העמוד אנחנו מציבים את המשתנה שהגיע מהקישור.
במסדי נתונים שליפות לא מחזירות מערך עם נתונים.
במקרה של פעולות שליפה mysql_query תחזיר למשתנה את השורות שהשליפה מצאה באופן מיוחד שנקרא משאב.
את השורות האלה אי אפשר סתם להדפיס. הם גם לא מערך עדיין. הם סוג נתונים אחר. משהו בזיכרון. כדי לקבל תוכן של שורה לתוך משתנה יש להשתמש בפונקציה mysql_fetch_assoc על המשאב שהתקבל מהשליפה.
כדי לבדוק כמה שורות נמצאו והוחזרו בשליפה - אפשר להפעיל את הפונקציה mysql_num_rows על המשאב עם התוצאות. הפונקציה מחזירה מספר של שורות.
אם המסד לא מצא עמוד עם המספר שביקשנו ממנו - mysql_num_rows תחזיר אפס ואנחנו נדע שהעמוד הזה לא קיים במסד. למשל אין לכם עמוד מספר 714 כנראה.
אם העמוד לא קיים, נדפיס הודעה בהתאם.
אם קיים — באמצעות mysql_fetch_assoc נקבל את הנתונים מהמשאב לתוך משתנה ונדפיס את העמודה content.
זהו, סקריפט ההצגה מוכן.
הכנסת נתונים
הדבר הראשון יהיה כמובן ליצור את טופס ההכנסה שיכיל רק שדה טקסט וכפתור.
<form method="post">
<textarea name="content"></textarea>
<input type="submit" />
</form>
<textarea name="content"></textarea>
<input type="submit" />
</form>
השלב הבא יהיה להכניס את הנתונים מהטופס למסד ברגע שהטופס נשלח.
נוסיף בדיקה האם הטופס נשלח ואינו ריק:
<?php
if( isset($_POST['content']) && trim($_POST['content') != '')
{
echo 'תודה, הטופס התקבל';
}
?>
<form method="post">
<textarea name="content"></textarea>
<input type="submit" />
</form>
if( isset($_POST['content']) && trim($_POST['content') != '')
{
echo 'תודה, הטופס התקבל';
}
?>
<form method="post">
<textarea name="content"></textarea>
<input type="submit" />
</form>
כמו במקרה הקודם, גם פה PHP אוטומטית מכניסה למערך $_POST את כל הנתונים שמגיעים מטופס. אם המשתמש לא לחץ "שלח", לא יגיעו נתונים מטופס למשתנה $_POST, הוא ישאר ריק והפונקציה isset תחזיר false
הפונקציה trim מורידה רווחים מתחילתה ומסופה של המחרוזת. אם המשתמש יכניס רק רווחים, הפונקציה trim תוריד אותם. נבדוק האם הטקסט (בלי רווחים) מכיל משהו (כלומר המשתמש הקליד משהו בשדה ולא סתם לחץ "שלח" עם טופס ריק).
אם הכל בסדר, נחליף את הודעת התודה ביצירת עמוד במסד.
יצירת שורה בטבלה נעשית באמצעות הפקודה INSERT
<?php
if( isset($_POST['content']) && trim($_POST['content']) != '')
{
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
echo "INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')";
mysql_query("INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')");
echo "<a href='show.php?id=".mysql_insert_id()."'>העמוד החדש</a>";
}
?>
<form method="post">
<textarea name="content"></textarea>
<input type="submit" />
</form>
if( isset($_POST['content']) && trim($_POST['content']) != '')
{
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
echo "INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')";
mysql_query("INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')");
echo "<a href='show.php?id=".mysql_insert_id()."'>העמוד החדש</a>";
}
?>
<form method="post">
<textarea name="content"></textarea>
<input type="submit" />
</form>
בתרגום מאנגלית הפקודה היא
הכנס לתוך הטבלה pages (בשדה content) את הערך
לתוך השדה content מציבים את המשתנה מהטופס.
כדי שיהיה לנו קל להבין מה קורה בזמן הלימוד — נדפיס את טקסט השאילתה שנשלחת למסד. אם נכתוב בטופס את המילה hello, השאילתה תיראה ככה:
INSERT INTO `pages` (`content`) VALUES ('hello')
עכשיו נסו לכתוב בטופס את המחרוזת הבאה: jack o'connor
INSERT INTO `pages` (`content`) VALUES ('jack o\'connor')
אם לא היה סלאש לפני הגרש בשם — מבחינת המסד המחרוזת הייתה נגמרת באות o
וכל השאר היה גורם לשאילתה לעוף עם שגיאה.
הוספת סלאש כזה נקראת הברחה ואותה עושה הפונקציה mysql_real_escape_string. השימוש בפונקציה הזו הוא חובה תמיד! כל פעם שאתם מעבירים נתונים למסד נתונים. גם בהכנסות, גם בשליפות, גם בעדכונים, גם בסקריפטים אחרים בפרויקטים לא קשורים. תמיד!.
שומעים? ת-מ-י-ד!
חוץ ממקום אחד.
שאלת בונוס: למה לא השתמשנו בפונקציה הזו בסקריפט השליפה? (תשובה בצבע לבן):
הברחה יש לעשות למחרוזות שעלולות לכלול גרש, גרשיים, מעברי שורה ועוד כמה תווים ספציפיים שהמסד דורש להבריח. מספרים הם אינם מחרוזות. הם מספרים. מספרים לא יכולים להכיל גרשיים או כל תו לא ספרתי אחר.
במקרה של השליפה - דבר ראשון ווידאנו שהמשתנה הוא הכן מספר ולכן בשאילתה יכולנו להניח שהוא כבר מספר ואין צורך לבצע עליו פעולות הברחה.
ומה עם id?
שמתם לב שלא רשמנו איזה ערך להכניס לשדה id? רשמנו רק ערך עבור content.
בגלל שהשדה id מוגד כ auto increment בעת יצירת הטבלה - הערך שלו פשוט גדל באחד עם כל הוספת שורה והערך החדש יהיה גדול באחד מהערך הקודם.
פונקציה מיוחדת mysql_insert_id יודעת להחזיר את ה id האחרון שהוכנס לטבלה אחרי ביצוע הכנסה. נשתמש בה כדי לקבל את מספר העמוד שהרגע נוצר ונדפיס קישור אליו עם אותו מספר show.php?id=X
צרו עמוד עם התוכן
<h1> כותרת </h1>
שורה ראשונה <br/>
שורה שניה
שורה ראשונה <br/>
שורה שניה
ועברו בקישור כדי לראות את העמוד שנוצר
זהו, יצירת עמודים מוכנה, הצגת נתונים מוכנה. נשאר רק לאפשר עריכה.
עריכה
הפעם נשתמש באותו פטנט של מספר העמוד בקישור, אבל בסקריפט ההוספה.
כשנגלוש ל manage.php?id=1 הסקריפט ידע שאנחנו עורכים את עמוד מס' 1
כשנגלוש סתם אל manage.php הסקריפט ידע שאנחנו יוצרים עמוד חדש.
גם במקרה הזה php אוטומטית תשים את הערכים מהקישור במשתנה $_GET
ובעזרת הפונקציה isset אנחנו נבדוק האם גלשו אל ?id=1 או סתם לעמוד.
במצב עריכה אנחנו נרצה להציג בתוך ה textarea את התוכן הישן של העמוד, לכן במצב עריכה נצטרך לשלוף קודם כל את התוכן הישן באופן דומה לזה שעשינו בהצגה.
<?php
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
// משתנה שיכיל את טקסט העמוד הנוכחי במקרה של עריכה
$current_text = ''; // נגדיר את המשתנה מראש
if( isset($_POST['content']) && trim($_POST['content']) != '')
{
mysql_query("INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')");
echo "<a href='show.php?id=".mysql_insert_id()."'>העמוד החדש</a>";
}
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
$pageResource = mysql_query("SELECT * FROM `pages` WHERE `id`=".$_GET['id']);
// בדיקה שהעמוד נמצא במסד. (יכול להיות שאין עמוד כזה בכלל)
if( mysql_num_rows($pageResource) == 1)
{
// הכנסת הנתונים מהמסד למערך
$page = mysql_fetch_assoc($pageResource);
// ושמירת התוכן הנוכחי במשתנה
$current_text = $page['content'];
}
}
?>
<form method="post">
<textarea name="content"><?php
echo htmlspecialchars($current_text);
?></textarea>
<input type="submit" />
</form>
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
// משתנה שיכיל את טקסט העמוד הנוכחי במקרה של עריכה
$current_text = ''; // נגדיר את המשתנה מראש
if( isset($_POST['content']) && trim($_POST['content']) != '')
{
mysql_query("INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')");
echo "<a href='show.php?id=".mysql_insert_id()."'>העמוד החדש</a>";
}
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
$pageResource = mysql_query("SELECT * FROM `pages` WHERE `id`=".$_GET['id']);
// בדיקה שהעמוד נמצא במסד. (יכול להיות שאין עמוד כזה בכלל)
if( mysql_num_rows($pageResource) == 1)
{
// הכנסת הנתונים מהמסד למערך
$page = mysql_fetch_assoc($pageResource);
// ושמירת התוכן הנוכחי במשתנה
$current_text = $page['content'];
}
}
?>
<form method="post">
<textarea name="content"><?php
echo htmlspecialchars($current_text);
?></textarea>
<input type="submit" />
</form>
הפעם את החיבור למסד אנחנו עושים בתחילת הסקריפט, ולא בתוך התנאי. הרי כל אחד מהתנאים עכשיו יצריך חיבור למסד ובמקום לכתוב את קוד החיבור בכל אחד מהתנאים מחדש, נכתוב אותו פעם אחת לפניהם.
התנאי הראשון נשאר זהה. אם המשתמש שלח את הטופס - לשמור אותו במסד.
נוסף תנאי חדש: האם המשתמש גלש לעמוד עם id כלשהו — במקרה הזה נציג את התוכן הנוכחי של העמוד בשדה הקלט.
נניח שהתוכן שלנו הוא <b>hi</b>. אם נכניס אותו לתוך textarea
נקבל בקוד מקור <textarea><b>hi</b></textarea>
זהו לא html תקין. ויותר מזה, דפדפנים מסוימים יכולים להחליט לא להציג את התגים הפנימיים בשדה בכלל.
הפונקציה htmlspecialchars דואגת לעניין הזה.
גלשו לעמוד עדכון עם id כלשהו ותראו את הטקסט הנוכחי בשדה.
עדכון במקום שמירה
ועכשיו החלק המעניין - העדכון או ההוספה?
כרגע יש לנו רק תנאי לבדיקה האם הטופס נשלח ואם כן - נבצע הוספה.
החלק המעניין הוא, שלא רשמנו לטופס action כלשהו ולכן הטופס נשלח לאותו עמוד שבו הדפדפן נמצא כרגע. אם המשתמש נמצא ב manage.php - הטופס ישלח אל manage.php. אבל אם המשתמש נמצא ב manage.php?id=7 הטופס ישלח בהתאם אל manage.php?id=7
זה אומר שגם בשליחת הטופס - הקישור יכיל את id במקרה של עריכה. ולכן בעת שמירת הטופס נוכל לבדוק האם קיים id בקישור. אם הוא קיים, אזי הטופס נשלח לעריכה. אם לא קיים - הטופס נשלח להוספה.
כל זה קורה במקרה שהטופס נשלח.
לכן לתוך הבדיקה "האם הטופס נשלח" נוסיף בדיקה נוספת "האם עריכה או הכנסה".
<?php
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
// משתנה שיכיל את טקסט העמוד הנוכחי במקרה של עריכה
$current_text = ''; // נגדיר את המשתנה מראש
if( isset($_POST['content']) && trim($_POST['content']) != '')
{
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
// עריכה של עמוד מספר id
mysql_query("UPDATE `pages` SET `content` =
'".mysql_real_escape_string($_POST['content'])."'
WHERE `id`=" . $_GET['id']);
echo "<a href='show.php?id=".$_GET['id']."'>העמוד אחרי עריכה</a>";
}
else
{
// הוספה של עוד חשד
mysql_query("INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')");
echo "<a href='show.php?id=".mysql_insert_id()."'>העמוד החדש</a>";
}
}
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
$pageResource = mysql_query("SELECT * FROM `pages` WHERE `id`=".$_GET['id']);
// בדיקה שהעמוד נמצא במסד. (יכול להיות שאין עמוד כזה בכלל)
if( mysql_num_rows($pageResource) == 1)
{
// הכנסת הנתונים מהמסד למערך
$page = mysql_fetch_assoc($pageResource);
// ושמירת התוכן הנוכחי במשתנה
$current_text = $page['content'];
}
}
?>
<form method="post">
<textarea name="content"><?php
echo htmlspecialchars($current_text);
?></textarea>
<input type="submit" />
</form>
mysql_connect('localhost', 'root', ''); // connect
mysql_select_db('test'); // select database
mysql_query("SET NAMES 'UTF8'"); // פתרון בעיית סימני שאלה
// משתנה שיכיל את טקסט העמוד הנוכחי במקרה של עריכה
$current_text = ''; // נגדיר את המשתנה מראש
if( isset($_POST['content']) && trim($_POST['content']) != '')
{
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
// עריכה של עמוד מספר id
mysql_query("UPDATE `pages` SET `content` =
'".mysql_real_escape_string($_POST['content'])."'
WHERE `id`=" . $_GET['id']);
echo "<a href='show.php?id=".$_GET['id']."'>העמוד אחרי עריכה</a>";
}
else
{
// הוספה של עוד חשד
mysql_query("INSERT INTO `pages` (`content`)
VALUES ('".mysql_real_escape_string($_POST['content'])."')");
echo "<a href='show.php?id=".mysql_insert_id()."'>העמוד החדש</a>";
}
}
if( isset($_GET['id']) && ctype_digit($_GET['id']))
{
$pageResource = mysql_query("SELECT * FROM `pages` WHERE `id`=".$_GET['id']);
// בדיקה שהעמוד נמצא במסד. (יכול להיות שאין עמוד כזה בכלל)
if( mysql_num_rows($pageResource) == 1)
{
// הכנסת הנתונים מהמסד למערך
$page = mysql_fetch_assoc($pageResource);
// ושמירת התוכן הנוכחי במשתנה
$current_text = $page['content'];
}
}
?>
<form method="post">
<textarea name="content"><?php
echo htmlspecialchars($current_text);
?></textarea>
<input type="submit" />
</form>
בתאני שבודק האם הטופס נשלח, הוספנו בדיקה האם קיים id והוא מספר.
אם כן, זוהי עריכה ונבצע שאילתת עדכון
עדכן טבלת pages הצב ערך חדש ל content איפשה שמספר העמוד שווה ל
את הערך החדש לתוכן לקחנו מהטופס.
את מספר העמוד לקחנו מהקישור.
אם אין מספר עמוד בקישור - נכניס לטבלה רשומה חדשה עם התוכן מהטופס.
זהו זה, מערכת ניהול תוכן מוכנה.
בנוסף
רצוי להציץ בקוד הדגמה לאופן הפעולה של [url=/phplive?code=23]isset[/url] ושל [url=/phplive?code=22]trim[/url].
אם פתאום התחלתם לקבל סימני שאלה - ראו על [url=/UTF_8_%D7%A7%D7%99%D7%93%D7%95%D7%93_%D7%95%D7%A1%D7%99%D7%9E%D7%A0%D7%99_%D7%A9%D7%90%D7%9C%D7%94.htm]קידוד ושימוש נכון ב-utf8[/url]
במקרה שנשארו שאלות אפשר [url=/qna]לפנות לפורום[/url] לקבלת עזרה.
תגובות לכתבה:
אלכס, קודם כל ישר כח. נראה מדריך באמת מושקע ומתאים מאוד לכלל המתחילים שרוצים לבנות מערכות ניהול תוכן.
אבל עדיין, אל תשכח שמפה זה רק מצריך התפתחות מצד המתכנת.. אפשר תמיד להוסיף Custom Fields וכו'.. כי הרי אתר שלם לא בנוי על אותה תבנית, לא? :]
כל הכבוד על המאמרים. כבר משתף את המאמר הזה ב-FB.
http://www.cmusic.co.il/
תודה רבה על התגובה יקיר.
הכן מפה והלאה אפשר להוסיף עוד שדות, כותרות, תמונות, מילות מפתח ועוד. העבודה איתם תהיה לגמרי זהה לעבודה עם השדה של התוכן.
:-)
כל הכבוד, יעזור למתחילים.
אני מדבר על כך, שיהיה לך אפשרות לקטלג את האתר לפי קטגוריות, וכל קטגוריה תשתמש ב-Custom Filed שונה. ככה שיש לך את הבסיס של התוכן, הכל רק יכול לרוץ..
בהצלחה בהמשך.
כל הכבוד!
אחלה מדריך אחי !
אפשר דמו ?
אין כל כך demo
בסה"כ המערכת מורכבת משני קבצים וטבלה אחת. את תוכן הקבצים manage.php ו show.php אתה יכול לקחת מהכתבה ולשמור כפי שהם תוך שינוי נתוני ההתחברות למסד.
קישור לקוד יצירת הטבלה יש בתחילת הכתבה. תעתיק אותו לתוך phpmyadmin לחלונית SQL, תפעיל והטבלה תווצר.
תודה רבה. אוהב את המדריכים שלך כל כך :D!
מדריך מושקע יעזור להמוןןן!!
תודה!
מדריך ממש מושקע! אבל יש לי שאלה קטנה:
ראיתי שהרבה עושים צ'אט ב-PHP ו-AJAX, ואפשר להכניס גירשים בלי ההברחה, האם ניתן לעשות זאת גם ב-PHP בלבד?
תודה מראש :)
את הגירשיים המשתמש מכניס בלי הברחה, הסקריפט עושה את זה אחרי שהוא מקבל את הנתונים (עם real_escape_string).
כן אני יודע, אבל איך ניתן להכניס את הטקסט למסד, כמו שהוא, אפילו שיש גירשים?
למסד זה נכנס רגיל, בלי הבאקסלאש (\) של ההברחה.
תו ההברחה רק נועד להודיע למסד שהגירשיים/גרש אחריו הם לא סוף המחרוזת, אלא פשוט תו כחלק מהמחרוזת.
אה, תודה :)